/**
 * axios 封装
 */
import axios from "axios";

import {
	Toast,
	Dialog
} from "vant";
import router from '@/router/index.js'
//导入本地存储方法
import * as Auth from "@/utils/auth.js"


// 创建一个 axios 实例
const service = axios.create({
	// `withCredentials` 表示跨域请求时是否需要使用凭证
	withCredentials: true, // 
	// `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
	// 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
	// baseURL: "http://47.98.166.100:5050",
	baseURL: "http://localhost:5050",
	timeout: 5000, // // `timeout` 指定请求超时的毫秒数(0 表示无超时时间)
});

/**
 * 请求拦截器
 */
service.interceptors.request.use((config) => {
	//如果本地有Token(用户已登录），让Axios携带这个Token，在header.authorization
	const token = Auth.getTokenLocal();
	if (token)
		config.headers.authorization = token;

	// 在发送请求之前做些什么
	Toast.loading('加载中...'); // 显示loading
	return config;
}, (error) => { // 处理请求错误
	Toast.clear(); // 隐藏loading
	return Promise.reject(error);
});

/**
 * 响应拦截器，
 * 每次响应的格式
 * { code => 状态码, msg => '响应信息', data => 数据 }
 */
service.interceptors.response.use((response) => {	

	Toast.clear(); // 隐藏loading
	const result = response.data; //注意后端返回的数据格式 result = { code msg data }
	if (result.code == 1) { //注意返回的code值的含义
		return Promise.resolve(result); //返回成功  
	} else {

		
		// 如果时Token错误（用户没登录 或 Token过期）		
		if (result.code === 401) {
			// Token错,需要重新登录
			
			Dialog.confirm({
				title: "要重新登录吗?",
				message: result.msg,
			}).then(() => {				
				//选择 需要登录
				
				Auth.removeTokenLocal(); //清除本地保存的Token				
				
				//跳转到 Login ,并传递参数（登录后返回的路径)
				router.push({
					name: 'login',
					params: {
						redirect: router.currentRoute.path
					}
				});				
				
			}).catch(() => {
				//选择 不需要登录 ，路由跳转到首页
				router.push({
					name: "home"
				});
			});

		} else {
			Dialog.alert({
				title: "响应错误",
				message: result.msg
			});
		}

		return Promise.reject(new Error(result.msg || "未知的响应错误"));
	}
}, (error) => {
	console.error("响应出错:" + error); //控制台错误提示  
	Toast.clear(); // 隐藏loading
	Dialog.alert({ // 全局错误提示
		title: "响应拦截器错误",
		message: error.message
	});
	return Promise.reject(error);
});

//默认引出
export default service;
